package org.example;

/**
 * 两两交换链表中的节点
 */
public class Solution30 {

    public ListNode swapPairs(ListNode head) {
        // 创建一个虚拟头节点，方便操作
        ListNode dummy = new ListNode(0);
        dummy.next = head;

        // 初始化指针
        ListNode prev = dummy;

        while (prev.next != null && prev.next.next != null) {
            // 定义要交换的两个节点
            ListNode first = prev.next;
            ListNode second = prev.next.next;

            // 交换节点
            first.next = second.next;
            second.next = first;
            prev.next = second;

            // 移动prev指针
            prev = first;
        }

        // 返回新的头节点
        return dummy.next;
    }

}
